GenerativeComponents Help

Different types of geometric scripts in GenerativeComponents

These examples illustrate the different ways scripts can be used in GenerativeComponents to generate geometry. The geometry is the same in this case but it is created using a range of different scripting techniques and concepts supported in GenerativeComponents.

The below set of transaction is run for specified steps, listed in the subsequent sections:
transaction 1 modelChange 'Add baseCS'
{
    node User.Objects.baseCS Bentley.GC.NodeTypes.CoordinateSystem
    {
        Technique                 = 'AtModelOrigin';
        GraphLocation             = <auto> {40.0, 40.0};
    }
}

transaction 2 modelChange 'Change baseCS'
{
    node User.Objects.baseCS Bentley.GC.NodeTypes.CoordinateSystem
    {
        GraphLocation             = {28.333, 117.5, 0.0, 115.59};
    }
}

transaction 3 modelChange 'Change baseCS'
{
    node User.Objects.baseCS Bentley.GC.NodeTypes.CoordinateSystem
    {
        Technique                 = 'AtModelOrigin';
        DGNModelName              = '3D Metric Design';
    }
}

transaction 4 modelChange 'Change baseCS'
{
    node User.Objects.baseCS Bentley.GC.NodeTypes.CoordinateSystem
    {
        GraphLocation             = {25.0, 82.5, 174.0, 115.59};
    }
}

transaction 5 script 'Points sequence by script transaction'
{
    for (int j = 0; j < 10; ++j)
    {
        Point point = new Point("p_" + j);
        point.ByCartesianCoordinates(baseCS,j+1.0,0.0,j*j/10);
        
    }
}

transaction 6 modelChange 'First (using full point nodes) BSpline curve'
{
    node User.Objects.curve1 Bentley.GC.NodeTypes.BSplineCurve
    {
        Points                    = {p_0, p_1, p_2, p_3, p_4, p_5, p_6, p_7, p_8, p_9};
        Color                     = 3;
    }
}

transaction 7 modelChange 'Define scale variable'
{
    node User.Objects.curveScale Bentley.GC.NodeTypes.Slider
    {
        Value                     = 1.0;
        Minimum                   = 0.1;
        Maximum                   = 2.0;
    }
}

transaction 8 modelChange 'Coordinate system for points defined by function'
{
    node User.Objects.cs2 Bentley.GC.NodeTypes.CoordinateSystem
    {
        CoordinateSystem          = baseCS;
        XTranslation              = <free> 0.0;
        YTranslation              = <free> 0.0;
        ZTranslation              = <free> 4.0;
        HandlesVisible            = true;
    }
}

transaction 9 modelChange 'Point (compound) defined by internal function'
{
    node User.Objects.points2 Bentley.GC.NodeTypes.Point
    {
        Function                  = function (cs,num,scale)
                                                                        {
                                                                            for (int j = 0; j < num; ++j)
                                                                            {
                                                                            
                                                                                Point point = new Point(this);
                                                                                
                                                                                point.ByCartesianCoordinates(cs,j+1.0,0.0,scale*j*j/num);
                                                                            }
                                                                        };
        FunctionArguments         = {cs2,10,curveScale};
    }
}

transaction 10 modelChange 'change curveScale variable'
{
    node User.Objects.curveScale Bentley.GC.NodeTypes.Slider
    {
        Value                     = 1.031;
    }
}

transaction 11 modelChange 'Second (using child node points) BSpline curve'
{
    node User.Objects.curve2 Bentley.GC.NodeTypes.BSplineCurve
    {
        Points                    = points2;
        Color                     = 4;
    }
}

transaction 12 modelChange 'Coordinate system for lightweight BSpline curve'
{
    node User.Objects.cs3 Bentley.GC.NodeTypes.CoordinateSystem
    {
        CoordinateSystem          = baseCS;
        XTranslation              = 0.0;
        YTranslation              = 0.0;
        ZTranslation              = <free> 8.0;
        HandlesVisible            = true;
    }
}

transaction 13 modelChange 'Third (using DSeries lightweight points) BSpline curve (defined by internal function)'
{
    node User.Objects.curve3 Bentley.GC.NodeTypes.BSplineCurve
    {
        Function                  = function (cs,num,scale)
                                                                        {
                                                                            DPoint3d dPoint = {}; // list of  points
                                                                            
                                                                            for (int j = 0; j < num; ++j)
                                                                            {
                                                                                dPoint[j] = new DPoint3d(1.0+j, 0.0, scale*j*j/num);
                                                                            }
                                                                            
                                                                            this.ByPointsAsDPoint3ds(cs, dPoint);
                                                                        };
        FunctionArguments         = {cs3,10,curveScale};
    }
}

transaction 14 modelChange 'Coordinate system for BSpline curve defined with inline function'
{
    node User.Objects.cs4 Bentley.GC.NodeTypes.CoordinateSystem
    {
        CoordinateSystem          = baseCS;
        XTranslation              = 0.0;
        YTranslation              = 0.0;
        ZTranslation              = <free> 12.0;
        HandlesVisible            = true;
    }
}

transaction 15 modelChange 'Fourth BSpline curve only as point'
{
    node User.Objects.p5T Bentley.GC.NodeTypes.Expression
    {
        Value                     = 0.5;
        IsValueDisplayed          = true;
    }
    node User.Objects.point4 Bentley.GC.NodeTypes.Point
    {
        Function                  = function(cs,num,scale,t)
                                    {
                                        DPoint3d dPoint = {}; // list of  points
                                        
                                        for (int j = 0; j < num; ++j)
                                        {
                                            dPoint[j] = new DPoint3d(1.0+j, 0.0, scale*j*j/num);
                                        }
                                        
                                        BSplineCurve childBSpline = new BSplineCurve(); 
                                        childBSpline.ByPointsAsDPoint3ds(cs, dPoint);
                                        
                                        this.ByParameterAlongCurve(childBSpline,t);
                                        
                                        
                                    };
        FunctionArguments         = {cs4, 10, curveScale,p5T};
    }
}

The graph view of above transactions